package com.example.imooc_utils.stream;

import com.alibaba.fastjson.JSON;
import com.example.imooc_utils.lambda.pojo.Sku;
import com.example.imooc_utils.lambda.service.SkuService;
import com.example.imooc_utils.utils.SkuCategoryEnum;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @author lxp
 * @program imooc_utils
 * @description 流式编程  对比原始操作
 * @create: 2019-12-26 14:41
 */
public class StreamVs {


    /**
     *  1.想看看购物车里有什么东西
     *  2.图书类商品都买
     *  3.其余的商品买两件最贵的
     *  4.只需要两件商品的名称和总价
     */


    /**
     * 原始集合操作实现
     */
    public void oldHandel(){

        List<Sku> skus = SkuService.getCartSkuList();

        /**
         * 1. 打印所有商品
         */
        skus.forEach( e ->{
            System.out.println(JSON.toJSONString(e, true));
        });

        /**
         * 2.图书类商品都买-过滤掉
         */
        List<Sku> notBooksSkuList =  new ArrayList<Sku>();
        skus.forEach( e ->{
            if(!e.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                notBooksSkuList.add(e);
        });

        notBooksSkuList.forEach( e ->{
            System.out.println(JSON.toJSONString(e, true));
        });



        /**
         * 3.其余的商品买两件最贵的
         */
        notBooksSkuList.sort((a , b) -> {
            if(a.getSkuPrice() > b.getSkuPrice())
                return -1;
            else
                return 1;
        });

        notBooksSkuList.sort(Comparator.comparingDouble(Sku::getSkuPrice));

        List<Sku> top2SkuList = new ArrayList<Sku>();

        for (int i = 0; i < 1; i++) {
            top2SkuList.add(notBooksSkuList.get(i));
        }


        /**
         * 只需要两件商品的名称和总价
         */
        Double money = 0.00;

        List<String> top2SkuString = new ArrayList<String>();
        for (Sku sku : top2SkuList) {
            money+= sku.getSkuPrice();
            top2SkuString.add(sku.getSkuName());
        }


        /**
         * 打印所有集合
         */
        notBooksSkuList.stream().forEach(e-> System.out.println( "====" +JSON.toJSONString(e,  true)));

        System.out.println("总价:" +  money);
    }



    /**
     * 以Stream流方式实现需求
     */
    public void newHandel(){
//        AtomicReference<Double> money
    }


}
